import request from "@/utils/request";
import { ProductSpecForm } from "./product-spec";

const PRODUCT_BASE_URL = "/api/v1/products";

const ProductAPI = {
  /** 获取菜品分页数据 */
  getPage(queryParams?: ProductPageQuery) {
    return request<any, PageResult<ProductPageVO[]>>({
      url: `${PRODUCT_BASE_URL}/page`,
      method: "get",
      params: queryParams,
    });
  },
  /**
   * 获取菜品表单数据
   *
   * @param id 菜品ID
   * @returns 菜品表单数据
   */
  getFormData(id: number) {
    return request<any, ProductForm>({
      url: `${PRODUCT_BASE_URL}/${id}/form`,
      method: "get",
    });
  },

  /** 添加菜品*/
  add(data: ProductForm) {
    return request({
      url: `${PRODUCT_BASE_URL}`,
      method: "post",
      data: data,
    });
  },

  /**
   * 更新菜品
   *
   * @param id 菜品ID
   * @param data 菜品表单数据
   */
  update(id: number, data: ProductForm) {
    return request({
      url: `${PRODUCT_BASE_URL}/${id}`,
      method: "put",
      data: data,
    });
  },

  /**
   * 更新菜品规格
   *
   * @param id 菜品ID
   * @param data 菜品表单数据
   */
  saveSpec(data: ProductForm) {
    return request({
      url: `${PRODUCT_BASE_URL}/spec`,
      method: "post",
      data: data,
    });
  },

  /**
   * 获取菜品规格
   *
   * @param id 菜品ID
   * @returns 菜品规格配置数据
   */
  getProductSpec(id: number) {
    return request<any, ProductSpecConfigForm>({
      url: `${PRODUCT_BASE_URL}/${id}/spec`,
      method: "get",
    });
  },

  /**
   * 批量删除菜品，多个以英文逗号(,)分割
   *
   * @param ids 菜品ID字符串，多个以英文逗号(,)分割
   */
  deleteByIds(ids: string) {
    return request({
      url: `${PRODUCT_BASE_URL}/${ids}`,
      method: "delete",
    });
  },
};

export default ProductAPI;

/** 菜品分页查询参数 */
export interface ProductPageQuery extends PageQuery {
  /** 分类ID */
  categoryId?: number;
  /** 菜品名称 */
  name?: string;
}

/** 菜品表单对象 */
export interface ProductForm {
  id?: number;
  /** 店铺ID */
  shopId?: number;
  /** 分类ID */
  categoryId?: number;
  /** 菜品名称 */
  name?: string;
  /** 菜品描述 */
  description?: string;
  /** 主图URL */
  mainImage?: string;
  /** 多图URL数组 */
  imageList?: string[];
  /** 现价 */
  price?: number;
  /** 原价 */
  originalPrice?: number;
  /** 成本价 */
  costPrice?: number;
  /** 库存(-1表示无限) */
  stock?: number;
  /** 销量 */
  sales?: number;
  /** 标签数组 */
  tags?: string[];
  /** 排序权重 */
  sort?: number;
  /** 状态：1-上架 0-下架 */
  status?: number;
  /** 规格列表 */
  specifications?: ProductSpecForm[];
}

/** 菜品规格配置对象 */
export interface ProductSpecConfigForm {
  id?: number;
  /** 菜单名称 */
  name?: string;
  /** 规格列表 */
  specifications?: ProductSpecForm[];
}

/** 菜品分页对象 */
export interface ProductPageVO {
  id?: number;
  /** 店铺ID */
  shopId?: number;
  /** 店铺名称 */
  shopName?: string;
  /** 分类ID */
  categoryId?: number;
  /** 分类名称 */
  categoryName?: string;
  /** 菜品名称 */
  name?: string;
  /** 菜品描述 */
  description?: string;
  /** 主图URL */
  mainImage?: string;
  /** 多图URL数组 */
  imageList?: string[];
  /** 现价 */
  price?: number;
  /** 原价 */
  originalPrice?: number;
  /** 成本价 */
  costPrice?: number;
  /** 库存(-1表示无限) */
  stock?: number;
  /** 销量 */
  sales?: number;
  /** 标签数组 */
  tags?: string[];
  /** 排序权重 */
  sort?: number;
  /** 状态：1-上架 0-下架 */
  status?: number;
  /** 创建时间 */
  createTime?: Date;
  /** 更新时间 */
  updateTime?: Date;
}
